#include "cbb_delay.h"
#include "cbb_init.h"

#include "FreeRTOS.h"
#include "task.h"

#if 0
#include "dev_input.h"
#include "dev_uart.h"
#include "device.h"
#include "device_def.h"

#include "myboard.h"
#include "dev_output.h"
#include <stdint.h>

void btn_task_test(void)
{
    // 按键监控
    device_ioctl(dev_btn1,INPUT_CMD_MONITOR,NULL);

    // 查询事件
    DevEvtDesc_t stEvtDesc={
        .u8EvtBit = INPUT_EVT_ACTIVE,
        .u8EvtState = EVENT_STATUS_UNSET,
    };
    device_read(dev_btn1, (uint8_t*)&stEvtDesc, DEV_EVT_DESC_SIZE);

    // 处理事件
    if(EVENT_STATUS_SET == stEvtDesc.u8EvtState)
    {
        // 清除事件
        stEvtDesc.u8EvtState = EVENT_STATUS_UNSET;
        device_write(dev_btn1, (uint8_t*)&stEvtDesc, DEV_EVT_DESC_SIZE);

        // 处理按键事件
        device_ioctl(dev_beep, OUTPUT_CMD_TOGGLE, NULL);
    }
}

static uint8_t u8RxData[128];

void uart_task_test(void)
{
    // 串口监视
    device_ioctl(dev_usart1,UART_CMD_MONITOR,NULL);

    // 查询事件
    DevEvtDesc_t stEvtDesc={
        .u8EvtBit = UART_EVT_DATA_READY,
        .u8EvtState = EVENT_STATUS_UNSET,
    };
    device_read(dev_usart1, (uint8_t*)&stEvtDesc, DEV_EVT_DESC_SIZE);

    // 处理事件
    if(EVENT_STATUS_SET == stEvtDesc.u8EvtState)
    {
        // 清除事件
        stEvtDesc.u8EvtState = EVENT_STATUS_UNSET;
        device_write(dev_usart1, (uint8_t*)&stEvtDesc, DEV_EVT_DESC_SIZE);

        // 处理事件

        Dev_Uart_Data_t stData = {
            .pu8Data = u8RxData,
            .u32Len = sizeof(u8RxData),
        };
        device_ioctl(dev_usart1, UART_CMD_RECEIVE, &stData);

        // 回环发送测试
        if(stData.u32Len > 0) 
        {
            device_ioctl(dev_usart1, UART_CMD_TRANSMIT, &stData);
        }
    }
}
#endif

int main(void)
{
    // 系统初始化
    cbb_system_init();

    // 延时任务
    cbb_delay_ms(100);

    // 开始任务调度
    vTaskStartScheduler();

    while(1)
    {
#if 0
        btn_task_test();

        uart_task_test();

        // 延时
        cbb_delay_ms(20);
#endif
    }

    return 0;
}
